//package cn.good.yan.config.demo1;
//
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.security.config.Customizer;
//import org.springframework.security.config.annotation.web.builders.HttpSecurity;
//import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
//import org.springframework.security.core.userdetails.User;
//import org.springframework.security.core.userdetails.UserDetailsService;
//import org.springframework.security.provisioning.InMemoryUserDetailsManager;
//import org.springframework.security.web.SecurityFilterChain;
//
///**
// * 一
// * 1. Spring Security - 自定义配置
// * 【基于内存的用户认证】
// * 【基于数据库的数据源】
// * 【自定义登录页】
// * 演示：
// * 1. 访问：api接口文档，对用户进行新增：http://localhost:8080/doc.html
// * 2. 被 Security 授权限制，跳转登录页，进行登录，输入 数据库里，其中一个人的用户名和密码，进行登录
// * 3. 登录成功，可访问api接口文档，进行创建数据
// * 4. 创建数据，加密规则：如果用户名不同，密码相同，他们生产的密码是不同的，防止暴力破解
// * 5. 创建用户成功，退出登录，可使用自己创建的用户进行，再次登录，登录成功
// *
// * @author shengren.yan
// * @create 2024-07-16
// */
//@Configuration
//// Spring项目总需要添加此注解，SpringBoot项目中不需要
//@EnableWebSecurity
//public class WebSecurityConfig {
//
//    // 演示：基于内存的用户认证  【只有基于内存的用户认证 】 进行开启
//    // 配置该类，启动程序，登录密码，是所设置的，不再是 Security 默认提供的了
//    // UserDetailsService 用来管理用户信息
////    @Bean
////    public UserDetailsService userDetailsService() {
////        InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
////        manager.createUser(
////                User
////                        .withDefaultPasswordEncoder()
////                        .username("yan")    // 自定义用户名
////                        .password("123456") // 自定义密码
////                        .roles("USER")      // 自定义角色
////                        .build()
////        );
////        return manager;
////    }
//
//    // 演示：基于数据库的用户认证 【只有基于数据库的用户认证 】 进行开启
//    // 如果注释该代码，在 DBUserDetailsManager 进行添加 @Configuration注解
////    @Bean
////    public UserDetailsService userDetailsService() {
////        DBUserDetailsManager manager = new DBUserDetailsManager();
////        return manager;
////    }
//
//
//    // 演示：自定义登录页
//    @Bean
//    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
//        //authorizeRequests()：开启授权保护
//        //anyRequest()：对所有请求开启授权保护
//        //authenticated()：已认证请求会自动被授权
//        http
//                .authorizeRequests(authorize -> {
//                    authorize
//                            .anyRequest()      // 对所有请求开启授权保护
//                            .authenticated();  // 已认证的请求会自动授权
//                })
//                .formLogin(form -> {
//                    form
//                            .loginPage("/login").permitAll()   // 登录页面无需授权即可访问
//                            .usernameParameter("username")     // 自定义表单用户名参数，默认是username
//                            .passwordParameter("password")     // 自定义表单密码参数，默认是password
//                            .failureUrl("/login?error") //登录失败的返回地址
//                    ;
//                }); // 表单授权方式
////                .httpBasic(Customizer.withDefaults()); //基本授权方式
//
//        // 暂时关闭csrf攻击
//        http.csrf(csrf -> csrf.disable());
//        return http.build();
//    }
//
//}
